name: publish
on:
  push:
    branches:
      - main

env:
  CI: true
  PNPM_CACHE_FOLDER: .pnpm-store
  NODE_OPTIONS: "--max-old-space-size=4096"
jobs:
  version_or_publish:
    runs-on: ubuntu-22.04
    steps:
      - name: checkout repo
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: install dependencies
        uses: "gradio-app/gradio/.github/actions/install-all-deps@main"
        with:
          always_install_pnpm: true
          node_auth_token: ${{ secrets.NPM_TOKEN }}
          npm_token: ${{ secrets.NPM_TOKEN }}
          skip_build: 'true'
      - name: Build packages
        run: | 
          . venv/bin/activate
          pip install build
          pnpm --filter @gradio/client --filter @gradio/lite build
      - name: create and publish versions
        id: changesets
        uses: changesets/action@v1
        with:
          version: pnpm ci:version
          commit: "chore: update versions"
          title: "chore: update versions"
          publish: pnpm ci:publish
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }}
      - name: add label to skip chromatic build
        if: ${{ steps.changesets.outputs.pullRequestNumber != '' && steps.changesets.outputs.pullRequestNumber != 'undefined' }}
        run: gh pr edit "$PR_NUMBER" --add-label "no-visual-update" 
        env:
          PR_NUMBER: ${{ steps.changesets.outputs.pullRequestNumber }}
          GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }} 
      - name: add label to run flaky tests
        if: ${{ steps.changesets.outputs.pullRequestNumber != '' && steps.changesets.outputs.pullRequestNumber != 'undefined' }}
        run: gh pr edit "$PR_NUMBER" --add-label "flaky-tests" 
        env:
          PR_NUMBER: ${{ steps.changesets.outputs.pullRequestNumber }}
          GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }} 
      - name: add label to run backend tests on Windows
        if: ${{ steps.changesets.outputs.pullRequestNumber != '' && steps.changesets.outputs.pullRequestNumber != 'undefined' }}
        run: gh pr edit "$PR_NUMBER" --add-label "windows-tests" 
        env:
          PR_NUMBER: ${{ steps.changesets.outputs.pullRequestNumber }}
          GITHUB_TOKEN: ${{ secrets.GRADIO_PAT }} 
      - name: publish to pypi
        if: steps.changesets.outputs.hasChangesets != 'true'
        uses: "gradio-app/github/actions/publish-pypi@main"
        env: 
          AWS_ACCESS_KEY_ID: ${{ secrets.AWSACCESSKEYID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWSSECRETKEY }}
          AWS_DEFAULT_REGION: us-west-2
        with:
          user: __token__
          passwords: |
            gradio:${{ secrets.PYPI_API_TOKEN }}
            gradio_client:${{ secrets.PYPI_GRADIO_CLIENT_TOKEN }}
      - name: trigger spaces deploy workflow
        env: 
          GITHUB_TOKEN: ${{ secrets.COMMENT_TOKEN }}
        run: gh workflow run deploy-spaces.yml
